/**
 * 留言
 *
 * @author 煤老板 <meok23@sina.com>
 * @date 2017-04-02
 */
var msg = {

    conf: {
        api: "",
        expire: 60,
        word: ["管理员", "admin", "root"]
    },

    build: function (conf) {
        msg.conf = $.extend(msg.conf, conf);

        msg.loadMsg();
    },

    /* 加载留言 */
    loadMsg: function () {
        var msg_url = msg.conf.api;
        var page = 1;
        if (arguments.length > 0) {
            page = arguments[0];
        }

        $.get(msg_url, {page: page}, function (res) {
            if (res.code === 0) {

                var htm = '';
                var d = res.data;
                $.each(d.data, function (index, ele) {
                    var tpl = msg.tplMsg(ele);
                    htm += tpl;
                });

                var htm_page = msg.tplPage(d.current_page, d.page_total, d.list_count);
                htm += htm_page;
                $('#msg_show').html(htm);
            }
        }, 'json');
    },

    /* 分页的模板 */
    tplPage: function (current_page, page_total, list_count) {
        if (list_count < 1) {
            return '';
        }

        var last = '';
        if (current_page <= 1) {
            last = '<a href="javascript:;">&lt;</a>';
        } else {
            var page = parseInt(current_page) - 1;
            last = '<a href="javascript:;" onclick="msg.loadMsg(' + page + ');">&lt;</a>';
        }

        var next = '';
        if (current_page >= page_total) {
            next = '<a href="javascript:;">&gt;</a>';
        } else {
            var page = parseInt(current_page) + 1;
            next = '<a href="javascript:;" onclick="msg.loadMsg(' + page + ');">&gt;</a>';
        }

        var tpl = '<div class="msg-page">'
            + '<ul>'
            + '<li><span>共' + list_count + '条 ' + current_page + '/' + page_total + '页</span></li>'
            + '<li>' + last + '</li>'
            + '<li>' + next + '</li>'
            + '</ul>'
            + '</div>';

        return tpl;
    },

    /* 留言列表模板 */
    tplMsg: function (data) {
        var tpl = '<div class="item">'
            + '<div class="top">'
            + '<b>' + data.nickname + '</b>'
            + '<time>' + new Date(data.create_time * 1000).Format('Y-m-d H:i') + '</time>'
            + '<a href="javascript:;" data-id="' + data.msg_id + '" onclick="msg.msgQuote(this);"># 引用</a>'
            + '</div>';
        var tpl_quote = '';
        if (data.quote.length > 1) {
            tpl_quote += '<blockquote>'
                + '<pre>引用 ' + data.quote.replace(/^`(.*)`.*/, "$1") + ' 的发言</pre>'
                + data.quote.replace(/^`(.*)`(.*)/, "$2")
                + '</blockquote>';
        }
        tpl = tpl + tpl_quote
            + '<div class="content">'
            + data.content
            + '</div>'
            + '</div>';

        return tpl;
    },

    /* 引用留言 */
    msgQuote: function () {
        var that = arguments[0];
        var item = $(that).closest('.item');

        var msg_id = $(that).data('id');
        var nickname = item.find('.top>b').text();
        var txt = item.children('.content').text();

        var htm = '<blockquote>'
            + '<pre>引用 ' + nickname + ' 的发言</pre>'
            + txt
            + '</blockquote><a class="close" href="javascript:;" onclick="msg.closeQuote();">&#xD7;</a>';

        $('#to_msg_id').val(msg_id);
        $('#quote_preview').html(htm);
    },

    /* 关闭引用 */
    closeQuote: function () {
        $('#to_msg_id').val(0);
        $('#quote_preview').empty();
    },

    /* 提交留言 */
    msgSubmit: function () {

        // 接收参数
        var that = arguments[0];

        // 防灌水
        if (msg.avertWater() === false) {
            alert('留言太频繁，请稍后操作。');
            return false;
        }

        // 称呼过滤
        var nickname = $("#msg_form").find('input[name=nickname]').val();
        if (msg.filterWord(nickname) === false) {
            var word = (msg.conf.word).join('/');
            alert('称呼不可包含：' + word + ' 等字眼。');
            return false;
        }

        // 校验
        if (!_validate($("#msg_form"))) {
            return false;
        }

        // 数据准备
        var data = $('#msg_form').serialize();
        var url = $(that).data('url');

        // 提交请求
        $.ajax({
            type: "POST",
            url: url,
            data: data,
            dataType: "json",
            success: function (res) {
                if (0 === res.code) {
                    $('#msg_form_notice').html('留言成功。');

                    // 标识灌水
                    msg.markWater();

                    // 清除前一次引用
                    msg.closeQuote();

                    // 更新列表
                    var info = msg.tplMsg(res.data);
                    $("#msg_show").prepend(info);

                } else if (403 === res.code) {
                    $('#msg_form_notice').html('没有权限。');
                } else {
                    $('#msg_form_notice').html('操作失败。' + res.msg);
                }
            },
            error: function () {
                $('#msg_form_notice').html('ajax 错误.');
            }
        });
    },

    /* 防灌水 */
    avertWater: function () {
        var c_name = 'msg_art_avert_water';
        var c_val = getCookie(c_name);

        if (c_val !== null) {
            return false;
        }

        return true;
    },

    /* 标识灌水 */
    markWater: function () {
        var c_name = 'msg_art_avert_water';
        setCookie(c_name, 'water', msg.conf.expire);
    },

    /* 关键词过滤 */
    filterWord: function (txt) {
        var data = msg.conf.word;

        txt = txt.toLowerCase().trim();

        for (var k in data) {
            if (new RegExp(data[k]).test(txt)) {
                return false;
            }
        }

        return true;
    }
};
